package com.demo.core.service.base;

import java.util.List;

import com.demo.core.model.Folder;
/**
 * 目录服务接口
 * 
 * @author ryuu.kk
 *
 */
public interface FolderService {

	/**
	 * 创建目录
	 * @param folder 目录模型
	 * @return 外键ID
	 */
	Long createFolder(Folder folder);
	
	/**
	 * 目录是否存在
	 * @param folderId 目录ID
	 * @return boolean 
	 */
	boolean folderExists(Long folderId);
	
	/**
	 * 目录是否存在
	 * @param uuid 唯一性标示ID
	 * @return boolean
	 */
	boolean folderExists(String uuid);
	
	/**
	 * 删除一个目录
	 * 包括删除目录下所有文件
	 * @param folderId 目录外键ID
	 */
	void deleteFolder(Long folderId);
	
	/**
	 * 根据用户Sit查询拥有的目录对象列表
	 * @param ownerSid 拥有者安全标识
	 * @return 目录列表
	 */
	List<Folder> ownFolder(Long ownerSid);
	
	/**
	 * 查找目录
	 * @param folderId 目录外键ID
	 * @return 目录对象模型
	 */
	Folder findFolder(Long folderId);
	
	/**
	 * 使用唯一标示符查询目录
	 * @param uuid 唯一标示符
	 * @return 目录模型对象
	 */
	Folder findFolder(String uuid);
	
	/**
	 * 根据父节点ID查询目录列表（只查询一层）
	 * @param siteId 站点外键ID
	 * @param pid 外键ID
	 * @return 目录列表
	 */
	List<Folder> findFolder(Long siteId, Long pid);
	
	/**
	 * 查询目录树，从ID所在节点到树的树根
	 * @param folderId 目录外键ID
	 * @return 目录模型对象
	 */
	Folder tree(Long folderId);
	
	/**
	 * 根据目录ID和树的深度查询该目录ID的深度为depth的目录模型
	 * @param folderId 目录ID
	 * @param depth 深度
	 * @return 目录
	 */
	Folder tree(Long folderId, int depth);
	
	/**
	 * 根据目录ID和树深度数组查询树型目录对象模型
	 * @param folderId 目录ID
	 * @param depthList 树深度List
	 * @return 目录对象模型
	 */
	Folder tree(Long folderId, List<Integer> depthList);
		
	/**
	 * 设置目录是否有效
	 * @param folderId 目录外键ID
	 * @param enabled 是否可用
	 * @param status 目录状态
	 */
	void validFolder(Long folderId, boolean enabled, String status);
	
	/**
	 * 更新目录名称和类型
	 * @param folderId 目录外键ID
	 * @param name 目录名
	 * @param title 目录标题
	 * @param type 目录类型
	 */
	void changeFolder(Long folderId, String name, String title, String type);
}
